package com.itheima.service.lmpl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.itheima.mapper.EmpMapper;
import com.itheima.pojo.Dept;
import com.itheima.pojo.Emp;
import com.itheima.pojo.PageBean;
import com.itheima.service.EmpServce;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

/**
 * @author :速趴赛亚锦
 * @date :2024/3/16 16:22
 */
@Slf4j
@Service
public class EmpServceImpl implements EmpServce {
    @Autowired
    private EmpMapper empMapper;
    /**
     *
     * @author :速趴赛亚锦            -----【分页查询】
     * @create :2024/03/17 11:26
     * ========================== 接收六个参数的完整分页查询
     */
    @Override
    public PageBean getPageBean(String name, Short gender, LocalDate begin, LocalDate end, Integer page, Integer pageSize) {

        /**
       =============================================================================================================
        * @author :速趴赛亚锦
        * @create :2024/03/17 13:19


        //第一步new出来一个对象
        PageBean pb = new PageBean();
        //第二步封装pd数据
        //先获取一个总记录数据
        Long total = empMapper.count();
        //需要计算起始索引
        Integer baginIndex = (page - 1)*pageSize;
        List<Emp> rows = empMapper.selectPage( baginIndex,pageSize);
        //                                      起始索引 和 每页显示条数
        //第三步数据封装到PageBean实体类的参数中
        pb.setTotal(total);
        pb.setRows(rows);
        return pb;
        ===========================================================================================================
        -----------------------------------------------------------------------------------------------------------
         */

        /**
         *
         * @author :速趴赛亚锦 -------------------------【使用插件后的分页查询 = 需要导入依赖】
         * @create :2024/03/17 11:26
         * =================================== 【接收六个参数的完整分页查询】
         */

         /*
          官方给的参考步骤
             1：你的mapper中 只需要提供 基础查询的功能即可 (不写count 不写 limit)
             2: service层在调用 mapper方法之前
                先 设置一个分页参数  步骤是固定步骤
         */
        // 设置分页参数
//        PageHelper.startPage(page,pageSize);//从这里开始做分页 传递两个参数 当前页码 每页显示条数
        // 执行 分页查询
//        List<Emp> empList = empMapper.page();
        // 得到结果 其实 底层是 List的一个实现类对象
        // 这个对象的类型 叫Page  import com.github.pagehelper.Page;
//        Page<Emp> p = (Page)empList;
        // p 就是 用于 存储 分页查询数据的一个对象
//        long total = p.getTotal();//总记录数
//        List<Emp> rows = p.getResult();//当前页的数据

//        PageBean pb = new PageBean(total,rows);//把 p里面的数据给 pb

//        return pb;


        // 体现分页查询
        // 使用 PageHelper 套路
        // 1: 设置分页参数   分页插件要干涉 你的sql执行了
        PageHelper.startPage(page,pageSize);
        //2: 执行我们的 基础sql  ---就是被分页插件干涉的 sql
        List<Emp> empList = empMapper.list(name,gender,begin,end);//基础条件查询
        log.info("查看一下 基础sql执行之后 是不是 封装了当前页的数据:"+empList);
        // 我们希望  插件干涉 sql 之后  完成分页数据的查询
        //  empList是  当前页的数据
        // 希望 分页插件 能够帮助我们 获取 总记录数 和 当前页数据
        // 3 解析page对象
        Page<Emp> p = (Page<Emp>)empList;//向下转型  因为想要用子类特有功能
        long total = p.getTotal();//获取总记录数
        //当前页数据
        List<Emp> rows = p.getResult();
        log.info("查看一下 rows的数据和 empList数据是否一致"+rows);

        PageBean pb = new PageBean();
        //需要两个属性
        pb.setTotal(total);
        pb.setRows(rows);
        return pb;

    }


    /**
     *
     * @author :速趴赛亚锦 -----------------【批量删除操作】
     * @create :2024/03/17 13:50
     */
    @Override
    public void delete(ArrayList<Integer> ids) {
        empMapper.delete(ids);
    }

    /**
     *------------------------------【新增员工】
     * @author :速趴赛亚锦
     * @create :2024/03/17 14:57
     */
    @Override
    public void add(Emp emp) {
        emp.setCreateTime(LocalDateTime.now());
        emp.setUpdateTime(LocalDateTime.now());
        empMapper.insert(emp);
    }

    /**
     * @author :速趴赛亚锦
     * @create :2024/03/17 15:12
     *
     * =============================【根据id回显数据和更新】
     */
    @Override
    public Emp findById(Integer id) {
        return empMapper.findById(id);
    }
    @Override
    public void update(Emp emp) {
    emp.setCreateTime(LocalDateTime.now());
    emp.setUpdateTime(LocalDateTime.now());
    empMapper.update(emp);
    }


    /**
     *
     * @author :速趴赛亚锦===============【登录操作】
     * @create :2024/03/18 13:03
     */
    @Override
    public Emp login(Emp emp) {
        Emp loginEmp = empMapper.getUserByUsernameAndPassword(emp);//emp是封装了 登录的账户和密码
        return loginEmp;
    }

}